{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "     sepal_length  sepal_width  petal_length  petal_width          species\n",
      "72            6.3          2.5           4.9          1.5  Iris-versicolor\n",
      "106           4.9          2.5           4.5          1.7   Iris-virginica\n",
      "117           7.7          3.8           6.7          2.2   Iris-virginica\n",
      "139           6.9          3.1           5.4          2.1   Iris-virginica\n",
      "99            5.7          2.8           4.1          1.3  Iris-versicolor\n",
      "['Iris-versicolor' 'Iris-virginica' 'Iris-setosa']\n"
     ]
    },
    {
     "data": {
      "image/png": "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\nYBiGYRhGHf8PT6EVHa/5rdcAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x636de30>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import pandas\n",
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "\n",
    "# Read in dataset\n",
    "iris = pandas.read_csv(\"iris.csv\")\n",
    "\n",
    "# shuffle rows\n",
    "shuffled_rows = np.random.permutation(iris.index)\n",
    "iris = iris.loc[shuffled_rows,:]\n",
    "\n",
    "print(iris.head())\n",
    "\n",
    "# There are 2 species\n",
    "print(iris.species.unique())\n",
    "iris.hist()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[17]]\n",
      "[ 1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.\n",
      "  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.\n",
      "  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.\n",
      "  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.\n",
      "  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.\n",
      "  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.\n",
      "  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.\n",
      "  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.\n",
      "  1.  1.  1.  1.  1.  1.]\n"
     ]
    }
   ],
   "source": [
    "z = np.asarray([[9, 5, 4]])\n",
    "y = np.asarray([[-1, 2, 4]])\n",
    "\n",
    "# np.dot is used for matrix multiplication\n",
    "# z is 1x3 and y is 1x3,  z * y.T is then 1x1\n",
    "print(np.dot(z,y.T))\n",
    "\n",
    "# Variables to test sigmoid_activation\n",
    "iris[\"ones\"] = np.ones(iris.shape[0])\n",
    "#print np.ones(iris.shape[0])\n",
    "X = iris[['ones', 'sepal_length', 'sepal_width', 'petal_length', 'petal_width']].values\n",
    "y = (iris.species == 'Iris-versicolor').values.astype(int)\n",
    "\n",
    "# The first observation\n",
    "x0 = X[0]\n",
    "\n",
    "# Initialize thetas randomly \n",
    "theta_init = np.random.normal(0,0.01,size=(5,1))\n",
    "def sigmoid_activation(x, theta):\n",
    "    x = np.asarray(x)\n",
    "    theta = np.asarray(theta)\n",
    "    return 1 / (1 + np.exp(-np.dot(theta.T, x)))\n",
    "                \n",
    "a1 = sigmoid_activation(x0, theta_init)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# First observation's features and target\n",
    "x0 = X[0]\n",
    "y0 = y[0]\n",
    "\n",
    "# Initialize parameters, we have 5 units and just 1 layer\n",
    "theta_init = np.random.normal(0,0.01,size=(5,1))\n",
    "def singlecost(X, y, theta):\n",
    "    # Compute activation\n",
    "    h = sigmoid_activation(X.T, theta)\n",
    "    # Take the negative average of target*log(activation) + (1-target) * log(1-activation)\n",
    "    cost = -np.mean(y * np.log(h) + (1-y) * np.log(1-h))\n",
    "    return cost\n",
    "\n",
    "first_cost = singlecost(x0, y0, theta_init)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# Initialize parameters\n",
    "theta_init = np.random.normal(0,0.01,size=(5,1))\n",
    "\n",
    "# Store the updates into this array\n",
    "grads = np.zeros(theta_init.shape)\n",
    "\n",
    "# Number of observations \n",
    "n = X.shape[0]\n",
    "for j, obs in enumerate(X):\n",
    "    # Compute activation\n",
    "    h = sigmoid_activation(obs, theta_init)\n",
    "    # Get delta\n",
    "    delta = (y[j]-h) * h * (1-h) * obs\n",
    "    # accumulate\n",
    "    grads += delta[:,np.newaxis]/X.shape[0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\nSgBd8ocBPwAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x38a3790>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "theta_init = np.random.normal(0,0.01,size=(5,1))\n",
    "\n",
    "# set a learning rate\n",
    "learning_rate = 0.1\n",
    "# maximum number of iterations for gradient descent\n",
    "maxepochs = 10000       \n",
    "# costs convergence threshold, ie. (prevcost - cost) > convergence_thres\n",
    "convergence_thres = 0.0001  \n",
    "\n",
    "def learn(X, y, theta, learning_rate, maxepochs, convergence_thres):\n",
    "    costs = []\n",
    "    cost = singlecost(X, y, theta)  # compute initial cost\n",
    "    costprev = cost + convergence_thres + 0.01  # set an inital costprev to past while loop\n",
    "    counter = 0  # add a counter\n",
    "    # Loop through until convergence\n",
    "    for counter in range(maxepochs):\n",
    "        grads = np.zeros(theta.shape)\n",
    "        for j, obs in enumerate(X):\n",
    "            h = sigmoid_activation(obs, theta)   # Compute activation\n",
    "            delta = (y[j]-h) * h * (1-h) * obs   # Get delta\n",
    "            grads += delta[:,np.newaxis]/X.shape[0]  # accumulate\n",
    "        \n",
    "        # update parameters \n",
    "        theta += grads * learning_rate\n",
    "        counter += 1  # count\n",
    "        costprev = cost  # store prev cost\n",
    "        cost = singlecost(X, y, theta) # compute new cost\n",
    "        costs.append(cost)\n",
    "        if np.abs(costprev-cost) < convergence_thres:\n",
    "            break\n",
    "        \n",
    "    plt.plot(costs)\n",
    "    plt.title(\"Convergence of the Cost Function\")\n",
    "    plt.ylabel(\"J($\\Theta$)\")\n",
    "    plt.xlabel(\"Iteration\")\n",
    "    plt.show()\n",
    "    return theta\n",
    "        \n",
    "theta = learn(X, y, theta_init, learning_rate, maxepochs, convergence_thres)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "theta0_init = np.random.normal(0,0.01,size=(5,4))\n",
    "theta1_init = np.random.normal(0,0.01,size=(5,1))\n",
    "def feedforward(X, theta0, theta1):\n",
    "    # feedforward to the first layer\n",
    "    a1 = sigmoid_activation(X.T, theta0).T\n",
    "    # add a column of ones for bias term\n",
    "    a1 = np.column_stack([np.ones(a1.shape[0]), a1])\n",
    "    # activation units are then inputted to the output layer\n",
    "    out = sigmoid_activation(a1.T, theta1)\n",
    "    return out\n",
    "\n",
    "h = feedforward(X, theta0_init, theta1_init)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "theta0_init = np.random.normal(0,0.01,size=(5,4))\n",
    "theta1_init = np.random.normal(0,0.01,size=(5,1))\n",
    "\n",
    "# X and y are in memory and should be used as inputs to multiplecost()\n",
    "def multiplecost(X, y, theta0, theta1):\n",
    "    # feed through network\n",
    "    h = feedforward(X, theta0, theta1) \n",
    "    # compute error\n",
    "    inner = y * np.log(h) + (1-y) * np.log(1-h)\n",
    "    # negative of average error\n",
    "    return -np.mean(inner)\n",
    "\n",
    "c = multiplecost(X, y, theta0_init, theta1_init)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x6a89ab0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Use a class for this model, it's good practice and condenses the code\n",
    "class NNet3:\n",
    "    def __init__(self, learning_rate=0.5, maxepochs=1e4, convergence_thres=1e-5, hidden_layer=4):\n",
    "        self.learning_rate = learning_rate\n",
    "        self.maxepochs = int(maxepochs)\n",
    "        self.convergence_thres = 1e-5\n",
    "        self.hidden_layer = int(hidden_layer)\n",
    "        \n",
    "    def _multiplecost(self, X, y):\n",
    "        # feed through network\n",
    "        l1, l2 = self._feedforward(X) \n",
    "        # compute error\n",
    "        inner = y * np.log(l2) + (1-y) * np.log(1-l2)\n",
    "        # negative of average error\n",
    "        return -np.mean(inner)\n",
    "    \n",
    "    def _feedforward(self, X):\n",
    "        # feedforward to the first layer\n",
    "        l1 = sigmoid_activation(X.T, self.theta0).T\n",
    "        # add a column of ones for bias term\n",
    "        l1 = np.column_stack([np.ones(l1.shape[0]), l1])\n",
    "        # activation units are then inputted to the output layer\n",
    "        l2 = sigmoid_activation(l1.T, self.theta1)\n",
    "        return l1, l2\n",
    "    \n",
    "    def predict(self, X):\n",
    "        _, y = self._feedforward(X)\n",
    "        return y\n",
    "    \n",
    "    def learn(self, X, y):\n",
    "        nobs, ncols = X.shape\n",
    "        self.theta0 = np.random.normal(0,0.01,size=(ncols,self.hidden_layer))\n",
    "        self.theta1 = np.random.normal(0,0.01,size=(self.hidden_layer+1,1))\n",
    "        \n",
    "        self.costs = []\n",
    "        cost = self._multiplecost(X, y)\n",
    "        self.costs.append(cost)\n",
    "        costprev = cost + self.convergence_thres+1  # set an inital costprev to past while loop\n",
    "        counter = 0  # intialize a counter\n",
    "\n",
    "        # Loop through until convergence\n",
    "        for counter in range(self.maxepochs):\n",
    "            # feedforward through network\n",
    "            l1, l2 = self._feedforward(X)\n",
    "\n",
    "            # Start Backpropagation\n",
    "            # Compute gradients\n",
    "            l2_delta = (y-l2) * l2 * (1-l2)\n",
    "            l1_delta = l2_delta.T.dot(self.theta1.T) * l1 * (1-l1)\n",
    "\n",
    "            # Update parameters by averaging gradients and multiplying by the learning rate\n",
    "            self.theta1 += l1.T.dot(l2_delta.T) / nobs * self.learning_rate\n",
    "            self.theta0 += X.T.dot(l1_delta)[:,1:] / nobs * self.learning_rate\n",
    "            \n",
    "            # Store costs and check for convergence\n",
    "            counter += 1  # Count\n",
    "            costprev = cost  # Store prev cost\n",
    "            cost = self._multiplecost(X, y)  # get next cost\n",
    "            self.costs.append(cost)\n",
    "            if np.abs(costprev-cost) < self.convergence_thres and counter > 500:\n",
    "                break\n",
    "\n",
    "# Set a learning rate\n",
    "learning_rate = 0.5\n",
    "# Maximum number of iterations for gradient descent\n",
    "maxepochs = 10000       \n",
    "# Costs convergence threshold, ie. (prevcost - cost) > convergence_thres\n",
    "convergence_thres = 0.00001  \n",
    "# Number of hidden units\n",
    "hidden_units = 4\n",
    "\n",
    "# Initialize model \n",
    "model = NNet3(learning_rate=learning_rate, maxepochs=maxepochs,\n",
    "              convergence_thres=convergence_thres, hidden_layer=hidden_units)\n",
    "# Train model\n",
    "model.learn(X, y)\n",
    "\n",
    "# Plot costs\n",
    "plt.plot(model.costs)\n",
    "plt.title(\"Convergence of the Cost Function\")\n",
    "plt.ylabel(\"J($\\Theta$)\")\n",
    "plt.xlabel(\"Iteration\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# First 70 rows to X_train and y_train\n",
    "# Last 30 rows to X_train and y_train\n",
    "X_train = X[:70]\n",
    "y_train = y[:70]\n",
    "\n",
    "X_test = X[-30:]\n",
    "y_test = y[-30:]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.590909090909\n"
     ]
    }
   ],
   "source": [
    "from sklearn.metrics import roc_auc_score\n",
    "# Set a learning rate\n",
    "learning_rate = 0.5\n",
    "# Maximum number of iterations for gradient descent\n",
    "maxepochs = 10000       \n",
    "# Costs convergence threshold, ie. (prevcost - cost) > convergence_thres\n",
    "convergence_thres = 0.00001  \n",
    "# Number of hidden units\n",
    "hidden_units = 4\n",
    "\n",
    "# Initialize model \n",
    "model = NNet3(learning_rate=learning_rate, maxepochs=maxepochs,\n",
    "              convergence_thres=convergence_thres, hidden_layer=hidden_units)\n",
    "model.learn(X_train, y_train)\n",
    "\n",
    "yhat = model.predict(X_test)[0]\n",
    "\n",
    "auc = roc_auc_score(y_test, yhat)\n",
    "print auc"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 2",
   "language": "python",
   "name": "python2"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.11"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
